/* eslint-disable camelcase */
import queryString from 'query-string';
import openApiRequest from '@/utils/openApiRequest';
import { ISchedule } from './tool';

interface IAttrs {
  [key: string]: any
}

// 基础类型，不直接使用，key都是对应接口的key，数据类型也是原始数据，不做转化
export interface IBaseServiceSchedule {
  did: string // 需要设置定时任务的设备id
  raw?: string // 原始控制指令
  attrs?: IAttrs // 定时任务下发的指令
  enabled: boolean // 是否启用，若不启用则时间到也不触发，默认启用
  remark?: string // 任务备注
}

// 基础类型，不直接使用，key都是对应接口的key，数据类型也是原始数据，不做转化
interface IServiceScheduleInfo extends IBaseServiceSchedule {
  date: string // 一次性定时任务的执行时间
  time: string // 定时任务执行的时间，精确到分钟，格式xx:xx，如：02:30
  repeat: string // 是否重复，”none”,”mon”, “tue”, “wed”, “thu”, “fri”, “sat”, “sun”

  // 以下为不常用字段，但接口是支持的，先列出来
  days?: number[] // 重复的日期列表，如[1, 15]表示每月1日和15日重复
  group_id?: string // 需要设置定时任务的设备分组id
  scene_id?: string // 需要设置定时任务的场景id
  start_date?: string // 定时任务执行的开始日期，该天0点开始，格式xxxx-xx-xx，如2016-09-01
  end_date?: string // 定时任务执行的结束日期，该天24点结束，格式xxxx-xx-xx，如2016-10-01
}

// 添加接口需要的数据
export interface IAddParamSchedule extends IServiceScheduleInfo {

}

// 编辑接口需要的数据
export interface IEditParamSchedule extends IServiceScheduleInfo {
  id: string // 通用定时任务id
}

// list接口返回的定时数据格式
export interface IServiceSchedule extends IEditParamSchedule {
  created_at: string // 任务创建时间 UTC 时间
  product_key: string // 产品PK
}


interface IListParam {
  did: string // 设备did
  limit?: number // 返回的结果条数
  skip?: number //
}



export async function getScheduleList(params: IListParam) {
  return openApiRequest(
    `app/devices/${params.did}/scheduler?${queryString.stringify(params)}`,
    { method: 'GET' }
  );
}

export async function addSchedule(params: IAddParamSchedule) {
  return openApiRequest(`app/devices/${params.did}/scheduler`, {
    method: 'POST',
    body: JSON.stringify(params),
  });
}

export async function editSchedule(params: IEditParamSchedule) {
  return openApiRequest(`app/devices/${params.did}/scheduler/${params.id}`, {
    method: 'PUT',
    body: JSON.stringify(params),
  });
}

export async function editScheduleEnabled(params: ISchedule, enabled: boolean) {
  return openApiRequest(`app/devices/${params.did}/scheduler/${params.id}`, {
    method: 'PUT',
    body: { ...params.sourceData, enabled },
  });
}

export async function deleteSchedule(scheduler: ISchedule) {
  return openApiRequest(`app/devices/${scheduler.did}/scheduler/${scheduler.id}`, {
    method: 'DELETE',
  });
}
